//生成指定角度的部分圆柱radius=半径，height=高度，angle=角度
module d_arc_cylinder(radius=40, height=60, angle=30) {
    rotate_extrude(angle=angle)  square([radius, height]);
}
//生成圆槽radius=半径，height=高度，width=两圆点距离
module d_2_circle_slot(radius=25,height=4,width=90){
          linear_extrude(height=height){
            hull() {
              translate([0, width]) circle(radius); 
              circle(radius); 
               }
        }
  
}

//生成螺孔模，head_d=螺帽直径，head_h=螺帽厚，screw_d=螺杆直径，screw_h=螺杆长
module d_screw_hole_diff(head_d=10,head_h=2,screw_d=8,screw_h=10){

        cylinder(d=head_d, h=head_h);
        
        // 螺杆部分
        translate([0, 0, head_height])
        cylinder(d=screw_d, h=screw_h);
 
}
//生成圆角四方体，xyz,rr=圆角半径
module d_round_cube(xyz,rr=1,center=false,zero=false){
    
    zz=(zero)?xyz[2]/2:0;
    translate([0,0,zz])
    minkowski(){
        cube([xyz[0]-2*rr,xyz[1]-2*rr,xyz[2]-2*rr],center);
        sphere(rr);
    }
}

//生成90度三角形加强筋
module d__tri_stiff(x=10,y=10,z=4){
    translate([0,z/2,0])rotate([90,0,0])
    linear_extrude(z)
    polygon([[0,0],[x,0],[0,y]]);
}
//生成非90度三角形加强筋
module d_ang_stiff(s=10,height=3,angle=120){
    sx=(angle>90)? -(s*cos(180-angle)):s*cos(angle);
    sy=(angle>90)?s*sin(180-angle):s*sin(angle);    
    linear_extrude(height)polygon([[0,0],[s,0],[sx,sy]]);  
}
//生成圆角等边三角形,并居中
module d_round_eq_tri(s=10,r=3,height=3){
    sx=s/2;
    sy=(s*sqrt(3))/6;
    linear_extrude(height)offset(r)polygon([[-sx,-sy],[sx,-sy],[0,2*sy]]);    
}
//生成指定顶角等腰三角形圆角掩码
module d_round_ang_mask(s=10,height=3,angle=20){
    sx=(angle>90)? -(s*cos(180-angle)):s*cos(angle);
    sy=(angle>90)?s*sin(180-angle):s*sin(angle);
    rr=s*tan(angle/2);
    
    linear_extrude(height){
       difference(){
            polygon([[0,0],[s,0],[sx,sy]]);  
            translate([s,rr])circle(rr);
        }  
   }
}
//生成半球壳
module d_half_ball_shell(r=10,thick=1){
    difference(){
        sphere(r);
        sphere(r-thick);
        translate([0,0,-r])cube(r*2,center=true);
    }
}

//正六边形edge=外接圆半径
module d_six_side_cube(edge=5,height=5){
     angles = [0:60:300];  // 生成0°~300°的6个角度
    points = [
        for (a=angles) 
        [edge * cos(a), edge * sin(a)]  // 极坐标转笛卡尔坐标[5](@ref)
    ];
    linear_extrude(height)
    polygon(points);
}

//生成半圆接长方体
module d_half_cy_cube(cd=10,cl=20,height=2){
    cylinder(h=height,d=cd);
    translate([0,-cd/2,0])cube([cl,cd,height]);
}

//生成轴承
module d_bearing(r=20,height=7,ball_r=3,ball_num=12){
    fr=ball_r+0.25;
    fx=fr*1.5;
    s2_xp=r-fx*0.5;
    cp=s2_xp-fr*1.33;
    s1_xp=cp-fr*1.33;
    
    rotate_extrude(){
        difference(){
            union(){
                translate([s1_xp,0,0]) square([fx,height],center=true);
                translate([s2_xp,0,0])square([fx,height],center=true);
            }
            translate([cp,0,0])circle(fr);
        }

    }
    dg=360/ball_num;
    for(ball=[0:dg:360]){
        rotate([0,0,ball])
        translate([cp,0,0])
        sphere(ball_r);
    }
     translate([0,0,-height/2])cylinder(h=height,r=fx*1.33);
}

//生成一套连接件
module d_fastening_pair(rod_len=10,rod_diam=5,cap_diam=7,cap_height=3,nut_height=0){
        union(){
            cylinder(h=cap_height,d=cap_diam);
            translate([0,0,cap_height])cylinder(h=rod_len,d=rod_diam);
        }
        nut_height=(nut_height == 0)?cap_height*2:nut_height;
        translate([0,cap_diam*2,0])difference(){
            cylinder(h=nut_height,d=rod_diam+0.2+2);
            cylinder(h=nut_height,d=rod_diam+0.2);
        }
    
}

//生成圆环
module d_torus(
    major_radius = 20, // 主半径（中心到截面圆心的距离）
    minor_radius = 5,  // 截面圆半径
    angle = 360        // 旋转角度（支持生成部分圆环）
) {
    rotate_extrude(angle = angle)
        translate([major_radius, 0, 0])
        circle(r = minor_radius);
}
//一节弹簧
module d_spring_base(){
    heart_points = [[-5,0],[5,3.75],[10,5],[0,7.5],[-5,8.75],[-10,10],[5,12.5]];
    path_sweep(square([0.8,10]), bezpath_curve(heart_points,splinesteps=64));
}

//直边倒圆角掩码
module d_round_line_mask(r=1,length=10){
    linear_extrude(length)difference() {
        square(r);
        circle(r);
    }
}
//圆柱倒圆角掩码
module d_round_circle_mask(rr=1,cr=10,ang=360){
    rotate_extrude(angle=ang)translate([cr,0])difference() {
        square(rr);
        circle(rr);
    }
}